﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using System.Collections;
using System.Text;
using Proxy;
using System.Web.Services;
using SIM.Util;

namespace SIM.Geo.UI.Geo
{
    public partial class frmCodificacionMuestras : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.rgLista.ClientSettings.Scrolling.ScrollHeight = int.Parse(System.Configuration.ConfigurationManager.AppSettings["listaPrincipalScrollHeight"]);
                CargarCombos();
                Listar();
            }
        }

        private void CargarCombos()
        {
            try
            {
                this.ddlEstadoBuscar.Items.Add(new ListItem(Constantes.TipoSeleccion.TODOS, TipoDropDownList.Todos.GetHashCode().ToString()));
                this.ddlEstadoBuscar.Items.Add(new ListItem(enmEstadoCodigoMuestra.Generado.ToString(), enmEstadoCodigoMuestra.Generado.GetHashCode().ToString()));
                this.ddlEstadoBuscar.Items.Add(new ListItem(enmEstadoCodigoMuestra.Asociado.ToString(), enmEstadoCodigoMuestra.Asociado.GetHashCode().ToString()));
                this.ddlEstadoBuscar.SelectedValue = enmEstadoCodigoMuestra.Generado.GetHashCode().ToString();

                using (var proxy = new SESerieMuestraClient("BasicHttpBinding_ISESerieMuestra"))
                {
                    var lista = proxy.ObtenerListItem1();
                    Bind(this.ddlSerieBuscar, lista);
                    Bind(this.ddlSerie, lista);
                    this.ddlSerie.Items.Insert(0, new ListItem(Constantes.TipoSeleccion.SELECCIONE, TipoDropDownList.Seleccionar.GetHashCode().ToString()));
                }

            }
            catch (Exception ex)
            {

                Logger.Error("frmCodificacionMuestras.aspx:CargarCombos", ex);
            }
        }

        #region Metodos
        protected override void Listar()
        {
            try
            {
                using (var proxy = new SECodigoMuestraClient("BasicHttpBinding_ISECodigoMuestra"))
                {
                    var lista = proxy.BuscarCodigoMuestra(int.Parse(this.ddlEstadoBuscar.SelectedValue), short.Parse(this.ddlSerieBuscar.SelectedValue));
                    this.rgLista.DataSource = lista;
                    
                    this.rgLista.DataBind();
                }
            }
            catch (Exception ex)
            {
                MostrarMensaje(MSG_ERROR_GENERICO, enmTipoMensajeMostrar.Error);
                Logger.Error("frmCodificacionMuestras.aspx:CargarCombos", ex);
            }
        }

        protected override void Limpiar()
        {
            this.ddlSerie.SelectedValue = TipoDropDownList.Seleccionar.GetHashCode().ToString();
            this.txtDesde.Text = string.Empty;
            this.txtHasta.Text = string.Empty;
            OcultarMensaje();
            OcultarMensajeValidacion();
        }
        protected override void Nuevo()
        {
            try
            {
                Limpiar();
                this.mpRegistro.Show();
            }
            catch (Exception ex)
            {

                Logger.Error("frmCodificacionMuestras.aspx:Nuevo", ex);
            }
        }

        protected override bool Validar(ref  StringBuilder sb)
        {
            bool retorno = true;
            try
            {
                using (var proxy = new SECodigoMuestraClient("BasicHttpBinding_ISECodigoMuestra"))
                {
                    bool result = proxy.ExisteRangoCodigoMuestra(short.Parse(this.ddlSerie.SelectedValue), int.Parse(this.txtDesde.Text), int.Parse(this.txtHasta.Text));
                    if (result)
                    {
                        sb.AppendLine("Ya existe registrado en el rango indicado. ");
                        return false;
                    }
                }
            }
            catch (Exception ex)
            {
                retorno = false;
                sb.AppendLine(MSG_ERROR_GENERICO);
                Logger.Error("frmCodificacionMuestras:Validar", ex);
            }
            return retorno;
        }
        protected override void Guardar()
        {
            try
            {
                StringBuilder sb = new StringBuilder();
                if (!this.Validar(ref sb))
                {
                    this.MostrarMensajeValidacion(sb.ToString());
                    return;
                }

                string result = string.Empty;
                using (var proxy = new SECodigoMuestraClient("BasicHttpBinding_ISECodigoMuestra"))
                {
                    result = proxy.GenerarCodigoMuestra(short.Parse(this.ddlSerie.SelectedValue), int.Parse(this.txtDesde.Text), int.Parse(this.txtHasta.Text));
                }

                if (result.CompareTo("Generado") == 0)
                {
                    MostrarMensaje("Código de muestra generado exitosamente.");
                }
                else
                {
                    MostrarMensaje(result, enmTipoMensajeMostrar.Advertencia);
                }
                Listar();
                this.mpRegistro.Hide();
            }
            catch (Exception ex)
            {
                MostrarMensajeValidacion(MSG_ERROR_GRABAR);
                Logger.Error("frmCodificacionMuestras.aspx:Guardar", ex);
            }
        }

        protected override void Eliminar()
        {
            try
            {
                List<string> codigos = new List<string>();
                bool result = false;
                foreach (GridDataItem item in this.rgLista.Items)
                {
                    CheckBox chkSel = (CheckBox)item.FindControl("chkSel");
                    if (chkSel != null)
                    {
                        if (chkSel.Checked)
                        {
                            HiddenField hidSel = (HiddenField)item.FindControl("hidSel");
                            HiddenField hidEstado = (HiddenField)item.FindControl("hidEstado");
                            if (hidEstado.Value.CompareTo(enmEstadoCodigoMuestra.Generado.GetHashCode().ToString()) == 0)
                                codigos.Add(hidSel.Value);
                        }
                    }
                }

                if (codigos.Count > 0)
                {
                    using (var proxy = new SECodigoMuestraClient("BasicHttpBinding_ISECodigoMuestra"))
                    {
                        proxy.EliminarCodigoMuestra1(codigos.ToArray());
                        result = true;
                    }
                }

                if (result)
                {
                    MostrarMensaje("Se ha eliminado los códigos de muestra con estado [Generado].");
                    Listar();
                }
                else
                {
                    MostrarMensaje("No ha eliminado ningún código de muestra.", enmTipoMensajeMostrar.Error);
                }

            }
            catch (Exception ex)
            {
                MostrarMensaje(MSG_ERROR_ELIMINAR, enmTipoMensajeMostrar.Error);
                Logger.Error("frmCodificacionMuestras.aspx:Eliminar", ex);
            }
        }
        #endregion

        #region Mensajes
        protected override void MostrarMensajeValidacion(string mensaje)
        {
            this.pnlMensajeValidacion.Visible = true;
            this.lblMensajeValidacion.Text = mensaje;
        }

        protected override void OcultarMensajeValidacion()
        {
            this.pnlMensajeValidacion.Visible = false;
            this.lblMensajeValidacion.Text = string.Empty;
        }

        protected override void MostrarMensaje(string mensaje, enmTipoMensajeMostrar tipoMensaje = enmTipoMensajeMostrar.Informativa)
        {
            this.pnlMensaje.Visible = true;
            this.lblMensaje.Text = mensaje;
            this.pnlMensaje.CssClass = this.ObtenerEstiloMensaje(tipoMensaje);
        }

        protected override void OcultarMensaje()
        {
            this.pnlMensaje.Visible = false;
            this.lblMensaje.Text = string.Empty;
        }

        #endregion

        protected void ddlSerie_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (var proxy = new SECodigoMuestraClient("BasicHttpBinding_ISECodigoMuestra"))
                {
                    int desde = proxy.ObtenerSeguienteCodigoMuestraPorSerie(short.Parse(this.ddlSerie.SelectedValue));
                    this.txtDesde.Text = desde.ToString();
                }
            }
            catch (Exception ex)
            {

                Logger.Error("frmCodificacionMuestras.aspx:ddlSerie_SelectedIndexChanged", ex);
            }
        }

        protected void rgLista_PageIndexChanged(object sender, GridPageChangedEventArgs e)
        {
            this.Listar();
        }

        protected void rgLista_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
        {
            this.Listar();
        }

        protected void rgLista_SortCommand(object sender, GridSortCommandEventArgs e)
        {
            this.Listar();
        }


        protected void ibtnCancelar_Click(object sender, ImageClickEventArgs e)
        {
            this.mpRegistro.Hide();
        }

        protected void ibtnGenerar_Click(object sender, ImageClickEventArgs e)
        {
            Nuevo();
        }

        protected void ibtnGuardar_Click(object sender, ImageClickEventArgs e)
        {
            Guardar();
        }

        protected void ibtnEliminar_Click(object sender, ImageClickEventArgs e)
        {
            Eliminar();
        }

        protected void ibtnBuscar_Click(object sender, ImageClickEventArgs e)
        {
            OcultarMensaje();
            Listar();
        }

        protected void rgLista_ItemCommand(object sender, GridCommandEventArgs e)
        {
            if (e.CommandName == RadGrid.FilterCommandName)
            {
                Listar();
            }
        }
    }
}